'use strict';

const Controller = require('egg').Controller;

const jwt = require('jsonwebtoken')

const nodemailer = require("nodemailer");

const Mock = require('mockjs')

// 验证码
let codeNum = 0

class LoginController extends Controller {
  // 登录
  async login() {
    const { ctx, app } = this;

    // 获取前端传来的参数
    const { username, password, code } = ctx.request.body;

    if (code == codeNum) {
      // 获取用户信息
      const data = await app.mysql.get('userlist', { password, username })

      if (data) {
        ctx.body = {
          code: 1,
          token: jwt.sign(data.id, '1908A')
        }
      } else {
        ctx.status = 401

        ctx.body = {
          code: 0,
          msg: '用户名或者密码错误'
        }
      }
    } else {
        // 验证输入有误
        ctx.status = 401

        ctx.body = {
          code: 0,
          msg: '验证码输入有误'
        }
    }


  }

  // 获取用户信息
  async getUserInfo() {
    const { ctx, app } = this;

    const { authorization } = ctx.request.headers;

    const id = jwt.verify(authorization, '1908A')

    // 通过id换取用户信息
    const data = await app.mysql.get('userlist', { id })

    ctx.body = {
      code: 1,
      data
    }
  }

  async getCode() {
    const { app, ctx } = this;

    // 获取前端传来的参数
    const { email } = ctx.request.body;

    // 创建连接邮箱的实例
    let transporter = nodemailer.createTransport({
      host: "smtp.163.com", // 邮箱的服务器地址
      port: 25, // 邮箱的端口号
      auth: {
        user: "18247113351@163.com", // 管理员邮箱的号码
        pass: "MEIREOSVYDUWHFXV" // 邮箱的验证码
      },
    });

    // 发送邮箱验证码的方法
    const sendSmtp = (email) => {
      // email: 发送消息的具体信息
      // 发送人，收件人，内容，标题
      transporter.sendMail(email, (err, data) => {
        if (err) console.log(err)
        else console.log(data)
      })
    }

    // 生成随机验证码
    codeNum = Mock.mock("@natural(1000,9999)")

    // 发送验证码是调用方法
    await sendSmtp({
      from: '18247113351@163.com', // 发件人
      to: email, // 收件人
      subject: '验证码', // 邮件标题
      html: `<div style="color: red" > ${codeNum} </div>`
    })




    ctx.body = {
      code: 1,
      msg: '发送成功',
      data: codeNum
    }


  }
}

module.exports = LoginController;
